//package com.softeem.score.manager.listener;
//
//import com.alibaba.excel.context.AnalysisContext;
//import com.alibaba.excel.event.AnalysisEventListener;
//import com.softeem.score.manager.mapper.RecordScoreMapper;
//import com.softeem.score.model.entity.educational.GradeDetail;
//import org.springframework.stereotype.Component;
//
//import java.math.BigDecimal;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//@Component
//public class ImportDataListener extends AnalysisEventListener<Map<Integer, String>> {
//
//    private final RecordScoreMapper recordScoreMapper;
//    private final Long teachingClassId;
//    private final List<GradeDetail> gradeDetailUpdates = new ArrayList<>();
//    private final List<Long> totalScoreUpdates = new ArrayList<>();
//    //                // 定义一个变量用于保存表头信息
//    final Map<Integer, Object> headerMap = new HashMap<>();
//
//    public ImportDataListener(RecordScoreMapper recordScoreMapper, Long teachingClassId) {
//        this.recordScoreMapper = recordScoreMapper;
//        this.teachingClassId = teachingClassId;
//    }
//
//    @Override
//    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
//        // 处理表头信息，获取每列的列名
//        for (Map.Entry<Integer, String> entry : headMap.entrySet()) {
//            Integer columnIndex = entry.getKey();
//            String columnName = entry.getValue();
//            if (!columnName.equals("学号") && !columnName.equals("姓名") && !columnName.equals("总成绩")) {
//                headerMap.put(columnIndex, recordScoreMapper.findGradeCompontCourseIdByName(columnName, teachingClassId));
//            } else {
//                headerMap.put(columnIndex, columnName);
//            }
//        }
//    }
//
//    boolean isValidScore(String cellValue) {
//        return cellValue != null && new BigDecimal(cellValue).compareTo(BigDecimal.ZERO) >= 0 &&
//                new BigDecimal(cellValue).compareTo(BigDecimal.valueOf(100)) <= 0;
//    }
//
//
//    @Override
//    public void invoke(Map<Integer, String> rowData, AnalysisContext context) {
//        Long gradeId = getGradeId(rowData, teachingClassId);
//        if (gradeId != null) {
//            for (Map.Entry<Integer, String> entry : rowData.entrySet()) {
//                Integer columnIndex = entry.getKey();
//                String cellValue = entry.getValue();
//                Object columnName = headerMap.get(columnIndex);
//                if (columnName instanceof Long) { // 是课程ID
//                    if (isValidScore(cellValue)) {
//                        GradeDetail gradeDetail = new GradeDetail();
//                        gradeDetail.setGradeId(gradeId);
//                        gradeDetail.setGradeComponentCourseId((Long) columnName);
//                        gradeDetail.setScore(new BigDecimal(cellValue));
//                        gradeDetailUpdates.add(gradeDetail);
//                    }
//                } else if (columnName.equals("总成绩")) {
//                    if (isValidScore(cellValue)) {
//                        totalScoreUpdates.add(gradeId);
//                    }
//                }
//            }
//        }
//    }
//
//    @Override
//    public void doAfterAllAnalysed(AnalysisContext context) {
//        // 批量更新成绩明细
//        batchUpdateGradeDetails(gradeDetailUpdates);
//        // 更新总成绩
//        updateTotalScores(totalScoreUpdates);        // 所有数据解析完成后的操作
//        String sheetName = context.readSheetHolder().getSheetName();
//        System.out.println("当前工作表名称：" + sheetName);
//    }
//
//
//    private Long getGradeId(Map<Integer, String> rowData, Long teachingClassId) {
//        return recordScoreMapper.findgradeIdByStudentNumberAndTeachingClassId(rowData.get(0), teachingClassId);
//    }
//
//    private void batchUpdateGradeDetails(List<GradeDetail> updates) {
//        // 在这里实现批量更新逻辑，例如：
//        recordScoreMapper.batchUpdateGradeDetail(updates);
//    }
//
//    private void updateTotalScores(List<Long> gradeIds) {
//        // 在这里实现总成绩更新逻辑，结合原有的循环计算总分，然后批量更新
//        // 可能需要将原有的循环逻辑改为根据gradeIds一次性查询所有相关GradeDetailVo
//    }
//}